home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club - Holiday 1996 / Software of the Month Club - Holiday 1996.iso / pc / win / fgx / robot.sx_ / robot.sx
Text File  |  1996-06-16  |  8KB  |  388 lines

  1. //////////////////////////////////////////
  2. // Robot (Baby making factory animation)
  3. // Robert Stewart
  4. // (see factory.sxt)
  5. /////////////////////////////////////
  6.  
  7. ROBOTBASE = 0
  8. ROBOTARM = deg 50
  9. ROBOTELBOW = deg 140
  10. ROBOTWRIST = deg 180
  11. ROBOTWIST = deg -10
  12. ROBOTGRAB = deg -5
  13.  
  14. shift y,-100
  15. shift z,500
  16. rotate y,deg -45
  17.  
  18. call animate1: 0
  19.  
  20. shift y,600
  21. lite = new light
  22.  
  23. position 0,200,0
  24. direction 200,100,600
  25. set camera
  26.  
  27. render mode RENDER_QUICK
  28. return
  29.  
  30. ///////////////////////////////// base
  31.  
  32. initialize:
  33.     ROBOTBASE = 0
  34.     ROBOTARM = deg 40
  35.     ROBOTELBOW = deg 180
  36.     ROBOTWRIST = deg 180
  37.     ROBOTWIST = 0
  38.     ROBOTGRAB = 0
  39.  
  40. draw:
  41.     res = 6
  42.     mat = new material color 120,150,168
  43.     mat.diffusion = 0.5
  44.     mat.specularity = 5
  45.     mat.shininess = 50
  46.     mat.smoothness = deg 80
  47.     robot_mesh = new list
  48.     call BOX
  49.     call BASE
  50.     call SHOULDER
  51.     call BICEP
  52.     call ELBOW
  53.     call TENDON
  54.     call FOREARM
  55.     call WRIST
  56.  
  57. animate1: time
  58.     position 300,0,740
  59.  
  60.     if time == 0
  61.         call initialize
  62.  
  63.     else if time <= 0.6
  64.         ROBOTBASE = time * deg -90/0.6
  65.         ROBOTARM = deg 40
  66.         ROBOTELBOW = deg 180
  67.         ROBOTWRIST = deg 180
  68.         ROBOTWIST = deg -90*time/0.6
  69.         ROBOTGRAB = 0
  70.  
  71.     else if time <= 1
  72.         ROBOTBASE = deg -90
  73.         ROBOTARM = deg 40 - deg -60*(time-0.6)/0.4
  74.         ROBOTELBOW = deg 180
  75.         ROBOTWRIST = deg 180
  76.         ROBOTWIST = deg -90
  77.         ROBOTGRAB = deg -40*(time-0.6)/0.4
  78.  
  79.     else if time <= 1.6
  80.         ROBOTBASE = deg -90
  81.         if time < 1.3
  82.             ROBOTARM = -deg -100 + deg -58*(time-1)/0.3
  83.             ROBOTELBOW = deg 180 + deg -35*(time-1)/0.3
  84.         else
  85.             ROBOTARM = deg 42
  86.             ROBOTELBOW = deg 145 + deg -55*(time-1.3)/0.3
  87.         ROBOTWRIST = deg 180
  88.         ROBOTWIST = deg -90
  89.         ROBOTGRAB = deg -5
  90.  
  91.     else if time <= 2.2
  92.         ROBOTBASE = deg -90 + (time-1.6) * deg 90 / 0.6
  93.         ROBOTARM = deg 42
  94.         ROBOTELBOW = -deg -90
  95.         ROBOTWRIST = deg 180
  96.         ROBOTWIST = deg -90
  97.         ROBOTGRAB = deg -5
  98.  
  99.     else
  100.         ROBOTBASE = 0
  101.         ROBOTARM = deg 42
  102.         ROBOTELBOW = -deg -90
  103.         ROBOTWRIST = deg 180
  104.         ROBOTWIST = deg -90
  105.         if time <= 2.5
  106.             ROBOTGRAB = deg -5+(time-2.2) * deg -20
  107.         else
  108.              ROBOTGRAB = deg 11
  109.  
  110.     %ROBOTBASE = ROBOTBASE
  111.     %ROBOTWIST = ROBOTWIST
  112.     call draw
  113.  
  114. animate2: time
  115.     position 300,0,420
  116.  
  117.     if time <= 0.8
  118.         call initialize
  119.  
  120.     else if time <= 1.4
  121.         ROBOTBASE = (time-0.8) * deg -90/0.6
  122.         ROBOTARM = deg 40
  123.         ROBOTELBOW = deg 180
  124.         ROBOTWRIST = deg 180
  125.         ROBOTWIST = deg -90*(time-0.8)/0.6
  126.         ROBOTGRAB = 0
  127.  
  128.     else if time <= 1.8
  129.         ROBOTBASE = deg -90
  130.         ROBOTARM = deg 40 - deg -60*(time-1.4)/0.4
  131.         ROBOTELBOW = deg 180
  132.         ROBOTWRIST = deg 180
  133.         ROBOTWIST = deg -90
  134.         ROBOTGRAB = deg -45 * (time-1.4)/0.4 - deg -5
  135.     
  136.     else if time <= 2.4
  137.         ROBOTBASE = deg -90
  138.         if time < 2.1
  139.             ROBOTARM = -deg -100 + deg -58*(time-1.8)/0.3
  140.             ROBOTELBOW = deg 180 + deg -20*(time-1.8)/0.3
  141.         else
  142.             ROBOTARM = deg 42
  143.             ROBOTELBOW = deg 127 + deg -70*(time-2.1)/0.3
  144.         ROBOTWRIST = deg 180
  145.         ROBOTWIST = deg -90
  146.         ROBOTGRAB = deg -10
  147.     
  148.     else if time <= 3
  149.         ROBOTBASE = deg -90 - (time-2.4) * deg -90/0.6
  150.         ROBOTARM = deg 42
  151.         ROBOTELBOW = -deg -90
  152.         ROBOTWRIST = deg 180
  153.         ROBOTWIST = deg -90
  154.         ROBOTGRAB = deg -10
  155.  
  156.     else if time <= 3.6
  157.         M = (time-3) / 0.6
  158.         ROBOTBASE = 0
  159.         ROBOTARM = deg 42 + deg 2 * M
  160.         ROBOTELBOW = deg 90 + deg 16 * M
  161.         ROBOTWRIST = deg 180
  162.         ROBOTWIST = deg -90 + 2*PI * M
  163.         ROBOTGRAB = deg -10
  164.  
  165.     else if time <= 4
  166.         M = (time-3.6) / 0.4
  167.         ROBOTBASE = 0
  168.         ROBOTARM = deg 42 + deg 2 * (1-M)
  169.         ROBOTELBOW = -deg -90 + deg 16 * (1-M)
  170.         ROBOTWRIST = deg 180
  171.         ROBOTWIST = deg -90
  172.         ROBOTGRAB = deg -10 + deg -10 * M
  173.     else
  174.         ROBOTBASE = 0
  175.         ROBOTARM = deg 42
  176.         ROBOTELBOW = -deg -90
  177.         ROBOTWRIST = deg 180
  178.         ROBOTWIST = deg -90
  179.         ROBOTGRAB = deg -20
  180.  
  181.     %ROBOTBASE = ROBOTBASE
  182.     %ROBOTWIST = ROBOTWIST
  183.     call draw
  184.  
  185.  
  186. ////////////////////////////////// base
  187.  
  188. BOX:
  189.     mesh m: x,y,z = -50,0,-50 to 50,-100,50 div 1,1,1 material mat
  190.     robot_mesh add m
  191.  
  192. BASE:
  193.     call make_cylinder_y: 0,0,0,10,50,50
  194.     rotate y,ROBOTBASE
  195.     call make_cylinder_y: 10,0,0,20,50,30
  196.     call make_cylinder_y: 30,0,0,10,30,30
  197.     call make_disk_xz: 0,40,0,30
  198.  
  199. SHOULDER:
  200.     shift y,40
  201.     rotate y,ROBOTBASE
  202.  
  203.     mesh m: x,z = -20,10 to 20,20 div res,1 material mat
  204.         y = (1+x/20)*(1-x/20)*90
  205.     robot_mesh add m
  206.  
  207.     mesh m: x,h = -20,0 to 20,1 div res,1 material mat
  208.         y = h*(1+x/20)*(1-x/20)*90
  209.     robot_mesh add m
  210.  
  211.     mesh m: x,z = -20,-10 to 20,-20 div res,1 material mat
  212.         y = (1+x/20)*(1-x/20)*90
  213.     robot_mesh add m
  214.  
  215.     mesh m: x,h = -20,0 to 20,1 div res,1 material mat
  216.         y = h*(1+x/20)*(1-x/20)*90
  217.     robot_mesh add m
  218.  
  219. ////////////////////////////////// Bicep
  220.  
  221. BICEP:
  222.     shift y,100
  223.     rotate y,ROBOTBASE
  224.     call make_disk_xy: 0,0,-30,6
  225.     call make_cylinder_z: -30,0,0,60,6,6
  226.     call make_disk_xy: 0,0,30,6
  227.     rotate z,ROBOTARM
  228.     call make_cylinder_y: 0,0,0,150,6,6
  229.     shift y,150
  230.     XELBOW,YELBOW,ZELBOW = get position
  231.  
  232. ELBOW:
  233.     shift y,100
  234.     rotate y,ROBOTBASE
  235.     rotate z,ROBOTARM
  236.     shift y,150
  237.     call make_disk_xy: 0,0,-10,10
  238.     call make_cylinder_z: -10,0,0,20,10,10
  239.     call make_disk_xy: 0,0,10,10
  240.     call make_disk_xy: 0,0,-12,4
  241.     call make_cylinder_z: -12,0,0,24,4,4
  242.     call make_disk_xy: 0,0,12,4
  243.  
  244. TENDON:
  245.     shift y,55
  246.     rotate y,ROBOTBASE
  247.     call TENDERJOINT
  248.     call CARTONE
  249.     a,b,c = get position
  250.     position XELBOW,YELBOW,ZELBOW
  251.     direction a,b,c
  252.     call make_cylinder_z: 0,0,0,150,3,3
  253.  
  254. TENDERJOINT:
  255.     call make_disk_xy: 0,0,-30,4
  256.     call make_cylinder_z: -30,0,0,60,4,4
  257.     call make_disk_xy: 0,0,30,4
  258.  
  259. CARTONE:
  260.     direction XELBOW,YELBOW,ZELBOW
  261.     call make_cylinder_z: 0,0,0,60,8,8
  262.  
  263. ////////////////////////////////// Forearm
  264.  
  265. FOREARM:
  266.     shift y,100
  267.     rotate y,ROBOTBASE
  268.     x,y = angle ROBOTARM + deg 90 radius 150
  269.     shift x,x
  270.     shift y,y
  271.     rotate z,ROBOTELBOW
  272.     call make_cylinder_y: 0,0,0,100,5,5
  273.  
  274. WRIST:
  275.     shift y,100
  276.     rotate y,ROBOTBASE
  277.     x,y = angle ROBOTARM + deg 90 radius 150
  278.     shift x,x
  279.     shift y,y
  280.     x,y = angle ROBOTELBOW + deg 90 radius 100
  281.     shift x,x
  282.     shift y,y
  283.     call make_disk_xy: 0,0,-8,8
  284.     call make_cylinder_z: -8,0,0,16,8,8
  285.     call make_disk_xy: 0,0,8,8
  286.  
  287.     call make_disk_xy: 0,0,-10,4
  288.     call make_cylinder_z: -10,0,0,20,4,4
  289.     call make_disk_xy: 0,0,10,4
  290.  
  291.     rotate z,ROBOTWRIST
  292.     call make_cylinder_y: 0,0,0,25,5,5
  293.     shift y,25
  294.     rotate y,ROBOTWIST
  295.     //
  296.     call make_disk_xy: 0,0,-8,8
  297.     call make_cylinder_z: -8,0,0,16,8,8
  298.     call make_disk_xy: 0,0,8,8
  299.     //
  300.     call make_disk_xy: 0,0,-10,4
  301.     call make_cylinder_z: -10,0,0,20,4,4
  302.     call make_disk_xy: 0,0,10,4
  303.     call PINCHA
  304.     call PINCHB
  305.     call PINCHC
  306.  
  307. PINCHA:
  308.     rotate z, deg -60 + ROBOTGRAB
  309.     call make_cylinder_y: 0,0,0,25,5,4
  310.     shift y,25
  311.     rotate z, deg 60 + ROBOTGRAB
  312.     call make_sphere: 0,0,0,4
  313.     call make_cylinder_y: 0,0,0,20,4,3
  314.     shift y,20
  315.     rotate z, deg 60 + ROBOTGRAB
  316.     call make_sphere: 0,0,0,3
  317.     call make_cylinder_y: 0,0,0,15,3,2
  318.     shift y,15
  319.     call make_sphere: 0,0,0,2
  320.  
  321. PINCHB:
  322.     rotate z, deg 60 - ROBOTGRAB
  323.     call make_cylinder_y: 0,0,0,25,5,4
  324.     shift y,25
  325.     rotate z, deg -60 - ROBOTGRAB
  326.     call make_sphere: 0,0,0,4
  327.     call make_cylinder_y: 0,0,0,20,4,3
  328.     shift y,20
  329.     rotate z, deg -60 - ROBOTGRAB
  330.     call make_sphere: 0,0,0,3
  331.     call make_cylinder_y: 0,0,0,15,3,2
  332.     shift y,15
  333.     call make_sphere: 0,0,0,2
  334.  
  335. PINCHC:    
  336.     shift y,40
  337.     A,B,C = get position
  338.     %PINX = A
  339.     %PINY = B
  340.     %PINZ = C
  341.     
  342. ////////////////////////////////////// sphere
  343.  
  344. make_sphere: x,y,z,r
  345.     position x,y,z mode POS_RELATIVE
  346.     mesh m: p,q = -PI_2,-PI to PI_2,PI div res/2,res material mat
  347.         x,y,z = angle p,q radius r
  348.     robot_mesh add m
  349.  
  350. ////////////////////////////////////// cylinder y
  351.  
  352. make_cylinder_y: y,x,z,d,u,v
  353.     position x,y,z mode POS_RELATIVE
  354.     mesh m: y,q = 0,-PI to d,PI div 1,res material mat
  355.         r = u + y*(v-u)/d
  356.         x,z = angle q radius r
  357.     robot_mesh add m
  358.  
  359. ////////////////////////////////////// cylinder z
  360.  
  361. make_cylinder_z: z,x,y,d,u,v
  362.     position x,y,z mode POS_RELATIVE
  363.     mesh m: z,q = 0,-PI to d,PI div 1,res material mat
  364.         r = u + z*(v-u)/d
  365.         x,y = angle q radius r
  366.     robot_mesh add m
  367.  
  368. ////////////////////////////////////// disk xy
  369.  
  370. make_disk_xy: x,y,z,r
  371.     z = 0
  372.     position x,y,z mode POS_RELATIVE
  373.     mesh m: a,b = 0,-PI to r,PI div 1,res material mat
  374.         x,y = angle b radius a
  375.     robot_mesh add m
  376.  
  377. ////////////////////////////////////// disk xz
  378.  
  379. make_disk_xz: x,y,z,r
  380.     y = 0
  381.     position x,y,z mode POS_RELATIVE
  382.     mesh m: a,b = 0,-PI to r,PI div 1,res material mat
  383.         x,z = angle b radius a
  384.     robot_mesh add m
  385.  
  386. //////////////////////////////////
  387. ////////////////////////
  388.